/****************************************************************************
 * arch/arm/src/bcm2708/bcm2708_pinmap.h
 *
 *   Copyright (C) 2017 Gregory Nutt. All rights reserved.
 *   Author: Gregory Nutt <gnutt@nuttx.org>
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 * 3. Neither the name NuttX nor the names of its contributors may be
 *    used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 ****************************************************************************/

#ifndef __ARCH_ARM_SRC_BCM2708_CHIP_BCM2708_PINMAP_H
#define __ARCH_ARM_SRC_BCM2708_CHIP_BCM2708_PINMAP_H 1

/****************************************************************************
 * Included Files
 ****************************************************************************/

#include <nuttx/config.h>

/****************************************************************************
 * Pre-processor Definitions
 ****************************************************************************/

#define GPIO_ARM_RTCK      (GPIO_PIN23 | GPIO_PUD_PULLDOWN | GPIO_ALT4)
#define GPIO_ARM_RTCK      (GPIO_PIN6  | GPIO_PUD_PULLUP | GPIO_ALT5)
#define GPIO_ARM_TCK       (GPIO_PIN13 | GPIO_PUD_PULLDOWN | GPIO_ALT5)
#define GPIO_ARM_TCK       (GPIO_PIN25 | GPIO_PUD_PULLDOWN | GPIO_ALT4)
#define GPIO_ARM_TDI       (GPIO_PIN26 | GPIO_PUD_PULLDOWN | GPIO_ALT4)
#define GPIO_ARM_TDI       (GPIO_PIN4  | GPIO_PUD_PULLUP | GPIO_ALT5)
#define GPIO_ARM_TDO       (GPIO_PIN24 | GPIO_PUD_PULLDOWN | GPIO_ALT4)
#define GPIO_ARM_TDO       (GPIO_PIN5  | GPIO_PUD_PULLUP | GPIO_ALT5)
#define GPIO_ARM_TMS       (GPIO_PIN12 | GPIO_PUD_PULLDOWN | GPIO_ALT5)
#define GPIO_ARM_TMS       (GPIO_PIN27 | GPIO_PUD_PULLDOWN | GPIO_ALT4)
#define GPIO_ARM_TRST      (GPIO_PIN22 | GPIO_PUD_PULLDOWN | GPIO_ALT4)

#define GPIO_BSCSL         (GPIO_PIN20 | GPIO_PUD_PULLDOWN | GPIO_ALT3)
#define GPIO_BSCSL         (GPIO_PIN21 | GPIO_PUD_PULLDOWN | GPIO_ALT3)
#define GPIO_BSCSL_SCL     (GPIO_PIN19 | GPIO_PUD_PULLDOWN | GPIO_ALT3)
#define GPIO_BSCSL_SDA     (GPIO_PIN18 | GPIO_PUD_PULLDOWN | GPIO_ALT3)
#define GPIO_MISO          (GPIO_PIN20 | GPIO_PUD_PULLDOWN | GPIO_ALT3)
#define GPIO_MOSI          (GPIO_PIN18 | GPIO_PUD_PULLDOWN | GPIO_ALT3)
#define GPIO_SCL0          (GPIO_PIN1  | GPIO_PUD_PULLUP | GPIO_ALT0)
#define GPIO_SCL0          (GPIO_PIN29 | GPIO_ALT0)
#define GPIO_SCL0          (GPIO_PIN45 | GPIO_ALT1)
#define GPIO_SCL1          (GPIO_PIN3  | GPIO_PUD_PULLUP | GPIO_ALT0)
#define GPIO_SCL1          (GPIO_PIN45 | GPIO_ALT2)
#define GPIO_SCLK          (GPIO_PIN19 | GPIO_PUD_PULLDOWN | GPIO_ALT3)

#define GPIO_CE_N          (GPIO_PIN21 | GPIO_PUD_PULLDOWN | GPIO_ALT3)

#define GPIO_CTS0          (GPIO_PIN16 | GPIO_PUD_PULLDOWN | GPIO_ALT3)
#define GPIO_CTS0          (GPIO_PIN30 | GPIO_PUD_PULLDOWN | GPIO_ALT3)
#define GPIO_CTS0          (GPIO_PIN39 | GPIO_PUD_PULLDOWN | GPIO_ALT2)
#define GPIO_CTS1          (GPIO_PIN16 | GPIO_PUD_PULLDOWN | GPIO_ALT5)
#define GPIO_CTS1          (GPIO_PIN30 | GPIO_PUD_PULLDOWN | GPIO_ALT5)
#define GPIO_CTS1          (GPIO_PIN43 | GPIO_PUD_PULLDOWN | GPIO_ALT5)

#define GPIO_GPCLK0        (GPIO_PIN20 | GPIO_PUD_PULLDOWN | GPIO_ALT5)
#define GPIO_GPCLK0        (GPIO_PIN32 | GPIO_PUD_PULLDOWN | GPIO_ALT0)
#define GPIO_GPCLK0        (GPIO_PIN34 | GPIO_PUD_PULLUP | GPIO_ALT0)
#define GPIO_GPCLK0        (GPIO_PIN4  | GPIO_PUD_PULLUP | GPIO_ALT0)
#define GPIO_GPCLK1        (GPIO_PIN21 | GPIO_PUD_PULLDOWN | GPIO_ALT5)
#define GPIO_GPCLK1        (GPIO_PIN42 | GPIO_PUD_PULLDOWN | GPIO_ALT0)
#define GPIO_GPCLK1        (GPIO_PIN44 | GPIO_ALT0)
#define GPIO_GPCLK1        (GPIO_PIN5  | GPIO_PUD_PULLUP | GPIO_ALT0)
#define GPIO_GPCLK2        (GPIO_PIN43 | GPIO_PUD_PULLDOWN | GPIO_ALT0)
#define GPIO_GPCLK2        (GPIO_PIN6  | GPIO_PUD_PULLUP | GPIO_ALT0)

#define GPIO_PCM_CLK       (GPIO_PIN18 | GPIO_PUD_PULLDOWN | GPIO_ALT0)
#define GPIO_PCM_CLK       (GPIO_PIN28 | GPIO_ALT2)
#define GPIO_PCM_DIN       (GPIO_PIN20 | GPIO_PUD_PULLDOWN | GPIO_ALT0)
#define GPIO_PCM_DIN       (GPIO_PIN30 | GPIO_PUD_PULLDOWN | GPIO_ALT2)
#define GPIO_PCM_DOUT      (GPIO_PIN21 | GPIO_PUD_PULLDOWN | GPIO_ALT0)
#define GPIO_PCM_DOUT      (GPIO_PIN31 | GPIO_PUD_PULLDOWN | GPIO_ALT2)
#define GPIO_PCM_FS        (GPIO_PIN19 | GPIO_PUD_PULLDOWN | GPIO_ALT0)
#define GPIO_PCM_FS        (GPIO_PIN29 | GPIO_ALT2)

#define GPIO_PWM0          (GPIO_PIN12 | GPIO_PUD_PULLDOWN | GPIO_ALT0)
#define GPIO_PWM0          (GPIO_PIN18 | GPIO_PUD_PULLDOWN | GPIO_ALT5)
#define GPIO_PWM0          (GPIO_PIN40 | GPIO_PUD_PULLDOWN | GPIO_ALT0)
#define GPIO_PWM1          (GPIO_PIN13 | GPIO_PUD_PULLDOWN | GPIO_ALT0)
#define GPIO_PWM1          (GPIO_PIN19 | GPIO_PUD_PULLDOWN | GPIO_ALT5)
#define GPIO_PWM1          (GPIO_PIN41 | GPIO_PUD_PULLDOWN | GPIO_ALT0)
#define GPIO_PWM1          (GPIO_PIN45 | GPIO_ALT0)

#define GPIO_RTS0          (GPIO_PIN17 | GPIO_PUD_PULLDOWN | GPIO_ALT3)
#define GPIO_RTS0          (GPIO_PIN31 | GPIO_PUD_PULLDOWN | GPIO_ALT3)
#define GPIO_RTS0          (GPIO_PIN38 | GPIO_PUD_PULLDOWN | GPIO_ALT2)
#define GPIO_RTS1          (GPIO_PIN17 | GPIO_PUD_PULLDOWN | GPIO_ALT5)
#define GPIO_RTS1          (GPIO_PIN31 | GPIO_PUD_PULLDOWN | GPIO_ALT5)
#define GPIO_RTS1          (GPIO_PIN42 | GPIO_PUD_PULLDOWN | GPIO_ALT5)

#define GPIO_SA0           (GPIO_PIN33 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SA0           (GPIO_PIN5  | GPIO_PUD_PULLUP | GPIO_ALT1)
#define GPIO_SA1           (GPIO_PIN32 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SA1           (GPIO_PIN4  | GPIO_PUD_PULLUP | GPIO_ALT1)
#define GPIO_SA2           (GPIO_PIN3  | GPIO_PUD_PULLUP | GPIO_ALT1)
#define GPIO_SA2           (GPIO_PIN31 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SA3           (GPIO_PIN2  | GPIO_PUD_PULLUP | GPIO_ALT1)
#define GPIO_SA3           (GPIO_PIN30 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SA4           (GPIO_PIN1  | GPIO_PUD_PULLUP | GPIO_ALT1)
#define GPIO_SA4           (GPIO_PIN29 | GPIO_ALT1)
#define GPIO_SA5           (GPIO_PIN0  | GPIO_PUD_PULLUP | GPIO_ALT1)
#define GPIO_SA5           (GPIO_PIN28 | GPIO_ALT1)

#define GPIO_SD0           (GPIO_PIN36 | GPIO_PUD_PULLUP | GPIO_ALT1)
#define GPIO_SD0           (GPIO_PIN8  | GPIO_PUD_PULLUP | GPIO_ALT1)
#define GPIO_SD1           (GPIO_PIN37 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD1           (GPIO_PIN9  | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD1_CLK       (GPIO_PIN22 | GPIO_PUD_PULLDOWN | GPIO_ALT3)
#define GPIO_SD1_CMD       (GPIO_PIN23 | GPIO_PUD_PULLDOWN | GPIO_ALT3)
#define GPIO_SD1_DAT0      (GPIO_PIN24 | GPIO_PUD_PULLDOWN | GPIO_ALT3)
#define GPIO_SD1_DAT1      (GPIO_PIN25 | GPIO_PUD_PULLDOWN | GPIO_ALT3)
#define GPIO_SD1_DAT2      (GPIO_PIN26 | GPIO_PUD_PULLDOWN | GPIO_ALT3)
#define GPIO_SD1_DAT3      (GPIO_PIN27 | GPIO_PUD_PULLDOWN | GPIO_ALT3)
#define GPIO_SD2           (GPIO_PIN10 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD2           (GPIO_PIN38 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD3           (GPIO_PIN11 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD3           (GPIO_PIN39 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD4           (GPIO_PIN12 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD4           (GPIO_PIN40 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD5           (GPIO_PIN13 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD5           (GPIO_PIN41 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD6           (GPIO_PIN14 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD6           (GPIO_PIN42 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD7           (GPIO_PIN15 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD7           (GPIO_PIN43 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD8           (GPIO_PIN16 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD9           (GPIO_PIN17 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD10          (GPIO_PIN18 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD11          (GPIO_PIN19 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD12          (GPIO_PIN20 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD13          (GPIO_PIN21 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD14          (GPIO_PIN22 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD15          (GPIO_PIN23 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD16          (GPIO_PIN24 | GPIO_PUD_PULLDOWN | GPIO_ALT1)
#define GPIO_SD17          (GPIO_PIN25 | GPIO_PUD_PULLDOWN | GPIO_ALT1)

#define GPIO_SDA0          (GPIO_PIN0  | GPIO_PUD_PULLUP | GPIO_ALT0)
#define GPIO_SDA0          (GPIO_PIN28 | GPIO_ALT0)
#define GPIO_SDA0          (GPIO_PIN44 | GPIO_ALT1)
#define GPIO_SDA1          (GPIO_PIN2  | GPIO_PUD_PULLUP | GPIO_ALT0)
#define GPIO_SDA1          (GPIO_PIN44 | GPIO_ALT2)

#define GPIO_SE            (GPIO_PIN34 | GPIO_PUD_PULLUP | GPIO_ALT1)
#define GPIO_SE            (GPIO_PIN6  | GPIO_PUD_PULLUP | GPIO_ALT1)
#define GPIO_SOE_N         (GPIO_PIN34 | GPIO_PUD_PULLUP | GPIO_ALT1)
#define GPIO_SOE_N         (GPIO_PIN6  | GPIO_PUD_PULLUP | GPIO_ALT1)

#define GPIO_SPI0_CE0_N    (GPIO_PIN36 | GPIO_PUD_PULLUP | GPIO_ALT0)
#define GPIO_SPI0_CE0_N    (GPIO_PIN8  | GPIO_PUD_PULLUP | GPIO_ALT0)
#define GPIO_SPI0_CE1_N    (GPIO_PIN35 | GPIO_PUD_PULLUP | GPIO_ALT0)
#define GPIO_SPI0_CE1_N    (GPIO_PIN7  | GPIO_PUD_PULLUP | GPIO_ALT0)
#define GPIO_SPI0_MISO     (GPIO_PIN37 | GPIO_PUD_PULLDOWN | GPIO_ALT0)
#define GPIO_SPI0_MISO     (GPIO_PIN9  | GPIO_PUD_PULLDOWN | GPIO_ALT0)
#define GPIO_SPI0_MOSI     (GPIO_PIN10 | GPIO_PUD_PULLDOWN | GPIO_ALT0)
#define GPIO_SPI0_MOSI     (GPIO_PIN38 | GPIO_PUD_PULLDOWN | GPIO_ALT0)
#define GPIO_SPI0_SCLK     (GPIO_PIN11 | GPIO_PUD_PULLDOWN | GPIO_ALT0)
#define GPIO_SPI0_SCLK     (GPIO_PIN39 | GPIO_PUD_PULLDOWN | GPIO_ALT0)
#define GPIO_SPI1_CE0_N    (GPIO_PIN18 | GPIO_PUD_PULLDOWN | GPIO_ALT4)
#define GPIO_SPI1_CE1_N    (GPIO_PIN17 | GPIO_PUD_PULLDOWN | GPIO_ALT4)
#define GPIO_SPI1_CE2_N    (GPIO_PIN16 | GPIO_PUD_PULLDOWN | GPIO_ALT4)
#define GPIO_SPI1_MISO     (GPIO_PIN19 | GPIO_PUD_PULLDOWN | GPIO_ALT4)
#define GPIO_SPI1_MOSI     (GPIO_PIN20 | GPIO_PUD_PULLDOWN | GPIO_ALT4)
#define GPIO_SPI1_SCLK     (GPIO_PIN21 | GPIO_PUD_PULLDOWN | GPIO_ALT4)
#define GPIO_SPI2_CE0_N    (GPIO_PIN43 | GPIO_PUD_PULLDOWN | GPIO_ALT4)
#define GPIO_SPI2_CE1_N    (GPIO_PIN44 | GPIO_ALT4)
#define GPIO_SPI2_CE2_N    (GPIO_PIN45 | GPIO_ALT4)
#define GPIO_SPI2_MISO     (GPIO_PIN40 | GPIO_PUD_PULLDOWN | GPIO_ALT4)
#define GPIO_SPI2_MOSI     (GPIO_PIN41 | GPIO_PUD_PULLDOWN | GPIO_ALT4)
#define GPIO_SPI2_SCLK     (GPIO_PIN42 | GPIO_PUD_PULLDOWN | GPIO_ALT4)

#define GPIO_SRW_N         (GPIO_PIN35 | GPIO_PUD_PULLUP | GPIO_ALT1)
#define GPIO_SRW_N         (GPIO_PIN7  | GPIO_PUD_PULLUP | GPIO_ALT1)
#define GPIO_SWE_N         (GPIO_PIN35 | GPIO_PUD_PULLUP | GPIO_ALT1)
#define GPIO_SWE_N         (GPIO_PIN7  | GPIO_PUD_PULLUP | GPIO_ALT1)

#define GPIO_RXD0          (GPIO_PIN15 | GPIO_PUD_PULLDOWN | GPIO_ALT0)
#define GPIO_RXD0          (GPIO_PIN33 | GPIO_PUD_PULLDOWN | GPIO_ALT3)
#define GPIO_RXD0          (GPIO_PIN37 | GPIO_PUD_PULLDOWN | GPIO_ALT2)
#define GPIO_RXD1          (GPIO_PIN15 | GPIO_PUD_PULLDOWN | GPIO_ALT5)
#define GPIO_RXD1          (GPIO_PIN33 | GPIO_PUD_PULLDOWN | GPIO_ALT5)
#define GPIO_RXD1          (GPIO_PIN41 | GPIO_PUD_PULLDOWN | GPIO_ALT5)

#define GPIO_TXD0          (GPIO_PIN14 | GPIO_PUD_PULLDOWN | GPIO_ALT0)
#define GPIO_TXD0          (GPIO_PIN32 | GPIO_PUD_PULLDOWN | GPIO_ALT3)
#define GPIO_TXD0          (GPIO_PIN36 | GPIO_PUD_PULLUP | GPIO_ALT2)
#define GPIO_TXD1          (GPIO_PIN14 | GPIO_PUD_PULLDOWN | GPIO_ALT5)
#define GPIO_TXD1          (GPIO_PIN32 | GPIO_PUD_PULLDOWN | GPIO_ALT5)
#define GPIO_TXD1          (GPIO_PIN40 | GPIO_PUD_PULLDOWN | GPIO_ALT5)

#endif /* __ARCH_ARM_SRC_BCM2708_CHIP_BCM2708_PINMAP_H */
